/**
 * @typedef CreateRoleBody
 * @property {string} name.required - 角色名称
 * @property {enum} status.required - 角色状态 0 禁用 1 启用 - eg: 0, 1
 */

/**
 * @typedef UpdateRoleBody
 * @property {integer} id.required - 角色id
 * @property {string} name.required - 角色名称
 * @property {enum} status.required - 角色状态 0 禁用 1 启用 - eg: 0, 1
 */

/**
 * @typedef LoginBody
 * @property {string} username.required - 登录用户名
 * @property {string} password.required - 密码
 */

/**
 * @typedef AssignRoleBody
 * @property {integer} roleId.required - 角色id
 * @property {integer[]} permissionIds.required - 权限资源id集合
 */

const express = require('express')
const router = express.Router()
const auth = require('@/middleware/auth.middleware')
const permissionController = require('@/controllers/permission.controller')
const staffController = require('@/controllers/staff.controller')

/**
 * 角色列表查询
 * @route GET /role
 * @summary 角色列表查询
 * @group 角色管理
 * @param {string} name.query - 角色名称
 * @param {enum} status.query - 角色状态 0 禁用 1 启用 - eg: 0, 1
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access role-manage-permission:btn:find
 * @security JWT
 */
router.get('/role', auth(), permissionController.findRoleList)

/**
 * 角色创建
 * @route POST /role
 * @summary 角色创建
 * @group 角色管理
 * @param {CreateRoleBody.model} CreateRoleBody.body.required
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access role-manage-permission:btn:add
 * @security JWT
 */
router.post('/role', auth(), permissionController.createRole)

/**
 * 角色编辑
 * @route PUT /role
 * @summary 角色编辑
 * @group 角色管理
 * @param {UpdateRoleBody.model} UpdateRoleBody.body.required
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access role-manage-permission:btn:edit
 * @security JWT
 */
router.put('/role', auth(), permissionController.updateRole)

/**
 * 角色删除
 * @route DELETE /role
 * @summary 角色删除
 * @group 角色管理
 * @param {number} id.query.required
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access role-manage-permission:btn:delete
 * @security JWT
 */
router.delete('/role', auth(), permissionController.deleteRole)

/**
 * 角色权限分配授权
 * @route POST /role/assign
 * @summary 角色权限分配授权
 * @group 角色管理
 * @param {AssignRoleBody.model} AssignRoleBody.body.required
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access role-manage-permission:btn:allocate
 * @security JWT
 */
router.post('/role/assign', auth(), permissionController.roleAllocationPermission)

/**
 * 角色资源权限查询
 * @route GET /role/permissions
 * @summary 角色资源权限查询
 * @group 角色管理
 * @param {number} roleId.query.require - 角色id
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access resource-config-permission:btn:find
 * @security JWT
 */
router.get('/role/permissions', auth(), permissionController.findRolePermissionIds)

/**
 * 员工登录
 * @route POST /login
 * @summary 员工登录
 * @group 员工管理
 * @param {LoginBody.model} LoginBody.body.required
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 */
router.post('/login', staffController.staffLogin)

module.exports = router
